#ifndef OPENCLOSEBUTTON_H
#define OPENCLOSEBUTTON_H

#include <QPushButton>
#include <QPainter>
#include <QPixmap>

// 枚举定义按钮的类型
enum class OpenCloseType
{
    Open,     // 开 - 两个箭头从竖线向外
    Close,    // 合 - 两个箭头指向竖线
    Stretch,  // 拉伸 - 两个箭头从横线向外
    Compress  // 压缩 - 两个箭头指向横线
};

class OpenCloseButton : public QPushButton
{
    Q_OBJECT

  public:
    // 构造函数，可以指定按钮类型
    explicit OpenCloseButton(OpenCloseType type, QWidget* parent = nullptr);

    // 设置按钮类型
    void setType(OpenCloseType type);

    // 设置边框颜色和宽度
    void setBorderColor(const QColor& color);
    void setBorderWidth(int width);

    // 设置箭头颜色
    void setArrowColor(const QColor& color);

    //// 设置线条颜色
    // void setLineColor(const QColor& color);

  protected:
    // 重写绘制事件
    void paintEvent(QPaintEvent* event) override;
    // 鼠标事件用于悬停效果
    bool event(QEvent* event) override;
    // 调整大小时重新生成缓存图像
    void resizeEvent(QResizeEvent* event) override;

  private:
    // 缓存绘制结果
    void generateCache();
    // 绘制开合类型的按钮（竖线+箭头）
    void drawOpenCloseButton(QPainter& painter, int centerX, int centerY, bool isOpen);

    // 绘制拉伸压缩类型的按钮（横线+箭头）
    void drawStretchCompressButton(QPainter& painter, int centerX, int centerY, bool isStretch);

  private:
    OpenCloseType m_type;  // 存储当前按钮类型
    QColor m_borderColor;  // 边框颜色
    int m_borderWidth;     // 边框宽度
    QColor m_arrowColor;   // 箭头颜色
    // QColor m_lineColor;    // 中间线条颜色
    bool m_isHovered;  // 鼠标悬停状态
    QPixmap m_cache;
};

#endif  // OPENCLOSEBUTTON_H